import json
from common import get_id2label
from config import conf
from openai import OpenAI

client = OpenAI(api_key="sk-1005ad44ad8742c396b682bd9234b36f", base_url="https://api.deepseek.com")


def predict(text):
    response = client.chat.completions.create(
        model="deepseek-chat",
        messages=[
            {"role": "system", "content": conf.llm_config.system_content},
            {"role": "user", "content": f"新闻标题：'{text}'，请分类并说明原因。"},
        ],
        stream=False
    )
    return json.loads(response.choices[0].message.content[8:-3])['category']


def _test_invoke_llm():
    text = '名师详解考研复试英语听力备考策略'
    print(f'text={text} result={predict(text)}')
    text = '四六级考前阅读冲刺：如何发挥正常水平'
    print(f'text={text} result={predict(text)}')
    text = '广东雷州男子嗜水如命日饮百斤'
    print(f'text={text} result={predict(text)}')


def validate():
    with open(conf.test_path, 'r', encoding='utf8') as f:
        lines = f.readlines()[:100]
    texts = [line.strip().split('\t')[0] for line in lines]
    labels = [get_id2label()[int(line.strip().split('\t')[1])] for line in lines]
    results = [predict(text) for text in texts]

    correct = 0
    for i, true_label in enumerate(labels):
        if true_label == results[i]:
            correct += 1
        else:
            print(f'第{i}个预测错误，text={texts[i]} true_label={true_label} result={results[i]}')

    print(f'acc={correct / 100}')
    """
    第2个预测错误，text=日本地震：金吉列关注在日学子系列报道 true_label=education result=society
第7个预测错误，text=去新西兰体验舌尖上的饕餮之旅(组图) true_label=education result=entertainment
第12个预测错误，text=研究生办替考网站续：幕后老板年赚近百万(图) true_label=education result=society
第16个预测错误，text=时评：高考应成为教育公平的“助推器” true_label=education result=society
第17个预测错误，text=九成外国人愿继续在日生活 六成留学生未返校 true_label=education result=society
第20个预测错误，text=送考队伍成海 高考场外那些煎熬的心 true_label=education result=society
第24个预测错误，text=倪震：我国首位参加GRE考试的盲人大学生 true_label=education result=society
第26个预测错误，text=微博“小达人”全球游：美国行程亮点 true_label=education result=entertainment
第31个预测错误，text=北京交管部门：高考考期8项出行提示 true_label=education result=society
第34个预测错误，text=大一女生开学报到带上百斤行李17双鞋雷倒同学 true_label=education result=society
第43个预测错误，text=教育话题：不能让何川洋做“牺牲品” true_label=education result=society
第48个预测错误，text=清华新百年首届本科生告别母校 true_label=education result=society
第51个预测错误，text=考上研究生被拒录考生状告兰大追踪 延期开庭 true_label=education result=society
第56个预测错误，text=英国一妇女整容成迈克尔-杰克逊(图) true_label=education result=entertainment
第57个预测错误，text=美国管理会计师协会推出2011年新举措 true_label=education result=finance
第58个预测错误，text=乌市高考考点周边扫描 各方配合助高考 true_label=education result=society
第62个预测错误，text=移民梦想照进现实：融入主流太难(图) true_label=education result=society
第65个预测错误，text=瑞士留学生活：学校打工挣兑换券故事 true_label=education result=society
第67个预测错误，text=名校农村生比例降低 该酝酿“平权法案”了 true_label=education result=society
第71个预测错误，text=比利时老汉酷爱穿企鹅装 愿葬身南极(组图) true_label=education result=entertainment
acc=0.8

测试集有问题
prompt也有问题“如果标题涉及教育机构但核心是社会贡献，优先归为 society。”
    """


if __name__ == '__main__':
    # _test_invoke_llm()
    validate()
    pass
